Ron'sWeek'n'ADAM
October 21, 1997


I suppose the job at hand is pretty much standard no matter what
the programming language:

- Define the problem to be solved.

- Understand all aspects of the problem, including what it is and
  what it is not. Be able to state the problem or task concisely.

- Break the problem or task down into as many component parts as
  possible, and write a plain language solution to as many of the
  components as possible

The solution will include:

- input of data
- processing of data
- output of data

It also helps to understand a thing or two about the users who
will be relying on the program for a solution to their problem, 
which is hopefully the same as the one the programmer is 
attempting to solve.

If the programmer can write about what he or she is doing at
every step of the process, that too will assist everyone in 
understanding the solution, provided of course that the writing 
is clear and concise, and provided that the programmer can step 
back about 600 miles from the work so as to see it in sharper 
perspective, warts and all.
I read all this in a book somewhere along with some rather
interesting generalizations about users.

1) Users hate computers.

2) Given a choice between the right key and the wrong key, the
   user will  press the wrong one. If the program fails to live,
   then it's dead.

3) The more educated the user, the greater the liklihood of user
   data being saved to the program disk.

4) A user will never read a doc file if there is some faint hope
   of getting the job done without it.

5) If a program doesn't work, the user will blame the program
   before looking in a mirror.

6) It is always a user's perrogative to criticize a program
   without knowing anything about it.

And while we're on the subject of generalizations, here are a 
few more, gleaned simply by looking around my own 'snake pit' 
at the collector's pieces duly assembled, or disassembled as 
the case may be.

1) They all have a screen of some sort that has to be controlled,
   formatted, made to look pretty and readable, and filled with 
   some sort of communication. They all have defined ways of 
   doing various screen functions, such as clearing, cursor 
   positioning, color or mode changing, etc.

2) They all have a keyboard with somebody's fingers attached -
   usually mine.

3) They all have a way of presenting printed information. Some
   share, but all can do it. This type of output must also be 
   formatted and made to look businesslike and professional.

4) Each has some method or other of storing information - even
   the Timex/Sinclair. Information, data, programs that are 
   stored must also be retrievable to be of any use. When 
   they're retrieved, something must be done with them.

5) Some have ways of communicating with eachother and with the
   outside world, and software designed for that purpose. They 
   do this in ways that can be understood from one computer to 
   the next make or age notwithstanding.

6) All have ways of producing sound just to spice things up, and
   keep the user interested.

7) All have modes where graphics are possible, again to spice
   things up and keep the user awake.

We could go on and on. I'm sure I've missed something.  Never-
theless it seems, given this sort of setting, that the program-
mer's task is one of solving the problem at hand in a manner of 
greatest benefit to the greatest number of users. In doing so, 
the resulting software will probably:

     - declare quantities and structures needed to start, and 
       assign preliminary values or weights to whatever variables
       are appropriate under the circumstances

     - introduce the purpose of the program along with instruct-
       ions if needed 

     - set up a manner of working with the user that makes sense

     - ask the user to input some data, fly a plane, shoot a gun,
       kill an alien, or access a file of aliens previously shot, 
       open a channel to some other point, or load a game that 
       was already in progress

     - process any new information that arrives from whatever
       source, be it disk, keyboard, modem or tape, according 
       to whatever recipe or or algorithm is given for the task

     - present some sort of output on the screen, on the printer,
       on a computer 12000 miles away, or on the machine half 
       naked out on my workbench.

    -  ask the user if there is any more to do and proceed
       accordingly

    - or... end things off in some sort of acceptable manner
      short of a complete crash. Usually this includes restoring 
      the machine state to what it was before program loading.

Again, I've probably forgotten something. The user can fill in
the blanks. The user will understand.......


